package com.jcj.endecoder;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 客户端,行解码器LineBasedFrameDecoder对发送接、收数据的处理
 *
 * @ChannelHandler.Sharable :表示该Handler类是线程安全的
 */
@ChannelHandler.Sharable
public class HandlerClientLineBased extends SimpleChannelInboundHandler<String> {

    /**
     * 处理接收到的消息
     *
     * @param channelHandlerContext 通道的上下文
     * @param info               接收到的字符串
     */
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, String info) throws Exception {
        System.out.println("接收到的消息: " + info.trim());
    }

    /**
     * 处理I/O事件的异常
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();//关闭当前Channel的连接
    }

    /**
     * 建立连接后该channelActive()方法只会被调用一次,这里的逻辑:建立连接后,字节序列被发送到服务器,编码格式是utf-8
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss SSS");//设置日期格式
        String strDate = df.format(new Date());
        String strMsg = "你好,服务器" + strDate+"\r\n";

        System.out.println("已经连上服务器,现在发送一条消息:" + strMsg);
        ctx.writeAndFlush(Unpooled.copiedBuffer(strMsg, CharsetUtil.UTF_8));
    }

}













































